package com.leetcode.offer.chapter2;

/**
 * @author Dennis Li
 * @date 2020/7/12 18:42
 */
public class BinaryOfOne_15 {

    // 把一个正数减去1之后再和原来的正数做位与运算，得到的结果相当于把
    // 整数的二进制表示中最右边的1变成0
    public int hammingWeight(int n) {
        int count = 0;
        while (n != 0) {
            count++;
            // 如果末尾不是1，一定会进位。持续下去可以计算出所有的位数
            // 末尾为0的时候-1，相当于对每一位进行了取反
            n &= n - 1;
        }

        return count;
    }

}
